package main

import (
	"encoding/binary"
	"fmt"
)

// 模拟量数据结构
type AnalogData struct {
	BackAirTemperature   int16   // 回风温度（℃）
	BackAirHumidity      int16   // 回风湿度（%）
	AVoltage             uint16  // A相电压（V）
	BVoltage             uint16  // B相电压（V）
	CVoltage             uint16  // C相电压（V）
	Reserved             uint16  // 保留
	PowerFrequency       uint16  // 电源频率（Hz）
	HeatingResistanceTemp int16  // 发热电阻温度（℃）
	NTC1Temp             int16   // NTC1温度（℃）
	NTC2Temp             int16   // NTC2温度（℃）
	NTC3Temp             int16   // NTC3温度（℃）
	Analog1              uint16  // 模拟量1（mA/V）
	Analog2              uint16  // 模拟量2（mA/V）
	Analog3              uint16  // 模拟量3（mA/V）
	Analog4              uint16  // 模拟量4（mA/V）
	Analog5              uint16  // 模拟量5（mA/V）
	Analog6              uint16  // 模拟量6（mA/V）
	HighPressure1        uint16  // 高压压力1（Bar）
	HighPressure2        uint16  // 高压压力2（Bar）
	LowPressure1         uint16  // 低压压力1（Bar）
	LowPressure2         uint16  // 低压压力2（Bar）
	WindPressure1        uint16  // 风压1（Pa）
	WindPressure2        uint16  // 风压2（Pa）
}
// 假设resp是从设备收到的响应字节切片
func ParseAnalogData(resp []byte) (*AnalogData, error) {
	// 确认resp长度至少为 LENID/2 + 其他固定字节数
	// LENID = 92，所以检查resp的长度是否符合
	if len(resp) < 92+9 { // +9 包括SOI, VER, ADR, 60H, 42H, LENGTH, CHKSUM, EOI
		return nil, fmt.Errorf("response too short")
	}

	// 提取DATA INFO部分
	data := resp[8 : 8+92] // 假设DATA INFO从第9个字节开始，长度为92

	analogData := AnalogData{
		BackAirTemperature:   int16(binary.BigEndian.Uint16(data[0:2])),
		BackAirHumidity:      int16(binary.BigEndian.Uint16(data[2:4])),
		AVoltage:             binary.BigEndian.Uint16(data[4:6]),
		BVoltage:             binary.BigEndian.Uint16(data[6:8]),
		CVoltage:             binary.BigEndian.Uint16(data[8:10]),
		// 解析剩余字段...
		PowerFrequency:       binary.BigEndian.Uint16(data[10:12]),
		HeatingResistanceTemp: int16(binary.BigEndian.Uint16(data[12:14])),
		// 继续解析直到最后一个字段
		WindPressure2:        binary.BigEndian.Uint16(data[90:92]),
	}

	return &analogData, nil
}
